/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.univalle.logica;

import co.edu.univalle.modelo.Empleado;
import co.edu.univalle.modelo.Perfiles;
import co.edu.univalle.persistencia.IEmpleadoDAO;
import co.edu.univalle.persistencia.IPerfilDAO;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Jhony
 */
@Stateless
public class EmpleadoLogica implements EmpleadoLogicaLocal {
    
    @EJB
    private IEmpleadoDAO empleadoDAO;
    
    @EJB
    private IPerfilDAO perfilDAO;
    
    @Override
    public void registrar(Empleado empleado) throws Exception {
        
        if(empleado == null){
             throw new Exception("El empleado no tiene información");
        }
        
        Empleado objEmpleado = empleadoDAO.consultarPorCedula(empleado.getCedula());
        
        if(objEmpleado != null){
            throw new Exception("El empleado ya existe");
        }
        
        if((empleado.getNombre() == null)||(empleado.getNombre().equals(""))){
            throw new Exception("El nombre no puede ser vacio");
        }
        
        if((empleado.getApellido() == null)||(empleado.getApellido().equals(""))){
            throw new Exception("El apellido no puede ser vacio");
        }
        
        if(empleado.getPerfil().getNombrePerfil() == null || empleado.getPerfil().getNombrePerfil().equals("")){
            throw new Exception("El empleado debe tener un perfil");
        }
                
        empleadoDAO.registrar(empleado);
    }

    @Override
    public void modificar(Empleado empleado) throws Exception {
        if(empleado == null){
             throw new Exception("El empleado no tiene información");
        }
        
        Empleado objEmpleado = empleadoDAO.consultarPorCedula(empleado.getCedula());
        
        if(objEmpleado != null){
            throw new Exception("El empleado ya existe");
        }
        
        if((empleado.getNombre() == null)||(empleado.getNombre().equals(""))){
            throw new Exception("El nombre no puede ser vacio");
        }
        
        if((empleado.getApellido() == null)||(empleado.getApellido().equals(""))){
            throw new Exception("El apellido no puede ser vacio");
        }
        
        if(empleado.getPerfil().getNombrePerfil() == null || empleado.getPerfil().getNombrePerfil().equals("")){
            throw new Exception("El empleado debe tener un perfil");
        }
        
        empleadoDAO.modificar(empleado);
    }

    @Override
    public void eliminar(Empleado empleado) throws Exception {
         if(empleado == null){
             throw new Exception("El empleado no tiene información");
        }
        
        Empleado objEmpleado = empleadoDAO.consultarPorCedula(empleado.getCedula());
        
        if(objEmpleado == null){
             throw new Exception("El empleado a eliminar no existe");             
        }
        
        empleadoDAO.eliminar(objEmpleado);
    }

    @Override
    public List<Empleado> consultar() throws Exception {
        return empleadoDAO.consultar();
    }

    @Override
    public Empleado consultarPorCedula(Long cedula) throws Exception {
        if(cedula == null || cedula.equals("")){
            throw new Exception("El documento es obligatorio");
        }
        
        return empleadoDAO.consultarPorCedula(cedula);
    }

    @Override
    public List<Empleado> consultarPorPerfil(String nombre) throws Exception {
        if(nombre == null || nombre.equals("")){
            throw new Exception("El nombre del perfil es obligatorio");
        }
        
        Perfiles objPerfil = perfilDAO.consultarPorNombre(nombre);
        
        if(objPerfil == null){
            throw new Exception("El perfil no existe"); 
        }
        
        return empleadoDAO.consultarPorPerfil(nombre);
    }

}
